home *** CD-ROM | disk | FTP | other *** search
/ Magnum One / Magnum One (Mid-American Digital) (Disc Manufacturing).iso / d12 / v10n12.arc / UNDOCSEL.C < prev    next >
Text File  |  1991-05-30  |  2KB  |  44 lines

  1. /*
  2. UNDOCSEL.C -- illustrates undocumented Windows selector functions
  3.  
  4. cl -c -AS -G2sw -Oais -Zpe undocsel.c printf.c
  5. link /align:16 undocsel printf,undocsel,,/nod slibcew libw,win.def
  6. rc undocsel.exe
  7.  
  8. Copyright (c) 1991 Ziff Communications Co.
  9.     PC Magazine * Andrew Schulman
  10. */
  11.         
  12. #include <windows.h>
  13. #include <dos.h>
  14. #include "printf.h"
  15.  
  16. /* undocumented Windows functions */
  17. extern DWORD FAR PASCAL GetSelectorBase(unsigned sel);
  18. extern DWORD FAR PASCAL GetSelectorLimit(unsigned sel);
  19. extern void FAR PASCAL SetSelectorBase(unsigned sel, DWORD base);
  20. extern void FAR PASCAL SetSelectorLimit(unsigned sel, DWORD limit);
  21.  
  22. #define FAIL(s) return MessageBox(NULL, s, "UNDOCSEL", MB_OK), 0
  23.  
  24. int PASCAL WinMain(HANDLE hInstance, HANDLE hPrevInstance,
  25.     LPSTR lpszCmdLine, int nCmdShow)
  26. {
  27.     unsigned sel, _ds;
  28.     unsigned long far *pticks;
  29.     if (! (GetWinFlags() & WF_PMODE))
  30.         FAIL("This program requires Windows Standard or Enhanced mode");
  31.     open_display("Undocumented Selector Function Test");
  32.     _asm mov _ds, ds
  33.     sel = AllocSelector(_ds);       // copy DS
  34.     printf("sel=%04X\n", sel);
  35.     SetSelectorBase(sel, 0x400);    // BIOS data area
  36.     SetSelectorLimit(sel, 0xFFFF);  // only 64k allowed
  37.     FP_SEG(pticks) = sel;
  38.     FP_OFF(pticks) = 0x6c;          // BIOS timer tick
  39.     printf("base=%08lx limit=%08lx ticks=%08lX\n", 
  40.         GetSelectorBase(sel), GetSelectorLimit(sel), *pticks);
  41.     show_display();
  42.     FreeSelector(sel);
  43. }
  44.